// 二分查找,数组默认是升序排序
int binSearch(int arr[], int arr_size, int val)
{
    int low = 0;
    int high = arr_size - 1;
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (val < arr[mid])
        {
            high = mid - 1;
        }
        else if (val > arr[mid])
        {
            low = mid + 1;
        }
        else
        {
            return mid;
        }
    }

    return -1;
}

/*
int compar(const void *p1, const void *p2);
如果compar返回值小于0（< 0），那么p1所指向元素会被排在p2所指向元素的前面
如果compar返回值等于0（= 0），那么p1所指向元素与p2所指向元素的顺序不确定
如果compar返回值大于0（> 0），那么p1所指向元素会被排在p2所指向元素的后面
int compareMyType (const void * a, const void * b)
{
    if ( *(MyType*)a < *(MyType*)b ) return -1;
    if ( *(MyType*)a == *(MyType*)b ) return 0;
    if ( *(MyType*)a > *(MyType*)b ) return 1;
 }
*/

// 注意qsort函数的使用规则
// 升序排序
int compare1(const void *a, const void *b)
{
    return (*(int *)a - *(int *)b);
}

int compare2(const void *a, const void *b)
{
    return (*(int *)b - *(int *)a);
}

void increSort(int *nums, int numsSize)
{
    qsort(nums, numsSize, sizeof(int), &compare1);
}

void decreaseSort(int *nums, int numsSize)
{
    qsort(nums, numsSize, sizeof(int), &compare2);
}